package estadistec.logica.dependencias;

import estadistec.logica.SuperGestor;
import estadistec.logica.gestores.Gestor;
import estadistec.logica.gestores.GestorManejable;
import estadistec.logica.gestores.IManejable;

/**
 * Gestor de los gestionables. Los gestionables que contiene son de un mismo 
 * tipo.
 * 
 * @param <N>
 *            Tipo de Gestionable que gestiona
 */
public abstract class GestorNodos<N extends INodo> 
	extends GestorManejable<N> implements IGestorNodos<N> 
{
	/** 
	 * Agrega un superior al nodo dado.
	 * 
	 * @param dependiente El nodo al cual va a agregar el superior.
	 * @param superior El nodo del cual depende el dependiente.
	 */
	private void agregarSuperior(IDependiente dependiente, 
			ISuperior superior) 
	{
		dependiente.agregarSuperior(superior);
	}

	/**
	 * Verifica si un nodo tiene algún otro nodo dependiente de él.
	 * @param llave Identificador del Nodo a consultar
	 */
	public boolean tieneDependientes(Long llave) {
		return ((ISuperior) _manejables.get(llave)).tieneDependientes();
	}


	/** 
	 * Encuentra un Nodo dado el nombre, el cual puede incluir referencias
	 * de quién depende. Por ejemplo: NombrePadre1.NombrePadre2.NombreNodo.
	 * 
	 * @param nombreRec 
	 * 
	 * @return Nodo.
	 */
	public Nodo getNodoXNombre(String nombreRec) {
		String[] nombres = nombreRec.split("\\.");
		int n = nombres.length;
		System.out.print("buscarRaiz([");
		for (String s : nombres)
			System.out.print(s + ", ");
		System.out.println("], " + n + "- 1))");
		return (buscarRaiz(nombres, n - 1));
	}

}
